/*
 * Copyright 2012 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.msports.sportify.android.sensors.ant;

import com.msports.sportify.android.sensors.ant.AntManager.ChannelStates;

/**
 * Ant channel configuration.
 * 
 * @author Jimmy Shih
 */
public abstract class ChannelConfiguration {

	public static final int UNASSIGNED_ANT_CHANNEL = -1;

	public static final byte FREQUENCY = 57; // 2457Mhz (Ant+ frequency)
	public static final byte TRANSMISSION_TYPE = 0; // 0 for wild card search
	public static final byte PROXIMITY_SEARCH = 7;

	private short deviceNumber = AntManager.WILDCARD;
	private ChannelStates channelState = ChannelStates.CLOSED;
	private boolean isInitializing = false;
	private boolean isDeinitializing = false;

	private int assignedAntChannel = UNASSIGNED_ANT_CHANNEL;
	

	/**
	 * Gets the My Tracks settings device id key.
	 */
	public abstract int getDeviceIdKey();

	/**
	 * Gets the device type.
	 */
	public abstract byte getDeviceType();

	/**
	 * Gets the message period.
	 */
	public abstract short getMessagPeriod();

	/**
	 * Decodes the message and places the value in antSensorValue.
	 * 
	 * @param message
	 *            the message
	 * @param antSensorValue
	 *            the ant sensor value
	 */
	// public abstract void decodeMessage(byte[] message, RawHeartRateData
	// antSensorValue);

	/**
	 * Gets the device number.
	 */
	public short getDeviceNumber() {
		return deviceNumber;
	}

	/**
	 * Sets the device number.
	 * 
	 * @param deviceNumber
	 *            the device number to set
	 */
	public void setDeviceNumber(short deviceNumber) {
		this.deviceNumber = deviceNumber;
	}

	/**
	 * Gets the channel state.
	 */
	public ChannelStates getChannelState() {
		return channelState;
	}

	/**
	 * Sets the channel state.
	 * 
	 * @param channelState
	 *            the channelState to set
	 */
	public void setChannelState(ChannelStates channelState) {
		this.channelState = channelState;
	}

	/**
	 * Returns true if initializing.
	 */
	public boolean isInitializing() {
		return isInitializing;
	}

	/**
	 * Sets isInitializing.
	 * 
	 * @param isInitializing
	 *            true if isInitializing
	 */
	public void setInitializing(boolean isInitializing) {
		this.isInitializing = isInitializing;
	}

	/**
	 * Returns true if deinitializing.
	 */
	public boolean isDeinitializing() {
		return isDeinitializing;
	}

	/**
	 * Sets isDeinitializing.
	 * 
	 * @param isDeinitializing
	 *            true if isDeinitializing
	 */
	public void setDeinitializing(boolean isDeinitializing) {
		this.isDeinitializing = isDeinitializing;
	}

	public int getAssignedAntChannel() {
		return assignedAntChannel;
	}

	public void setAssignedAntChannel(int assignedAntChannel) {
		this.assignedAntChannel = assignedAntChannel;
	}
}
